package main

import (
	"fmt"
	"log"

	"excel/config"
	"excel/database"
	"excel/handlers"
	"excel/middleware"
	"excel/models"

	"github.com/gin-gonic/gin"
)

func main() {
	// 加载配置文件
	cfg, err := config.LoadConfig("config.json")
	if err != nil {
		log.Fatalf("Failed to load config: %v", err)
	}

	// 初始化数据库连接
	err = database.InitDB(
		cfg.Database.Host,
		cfg.Database.Port,
		cfg.Database.Username,
		cfg.Database.Password,
		cfg.Database.DBName,
	)
	if err != nil {
		log.Fatalf("Failed to initialize database: %v", err)
	}

	// 创建数据表
	if err := createTables(); err != nil {
		log.Fatalf("Failed to create tables: %v", err)
	}

	r := gin.Default()

	// 中间件
	r.Use(middleware.CorsMiddleware())
	r.MaxMultipartMemory = 8 << 20 // 8 MiB

	// 路由
	setupRoutes(r)

	// 启动服务器
	serverPort := fmt.Sprintf(":%d", cfg.Server.Port)
	log.Printf("Server starting on port %d...", cfg.Server.Port)
	r.Run(serverPort)
}

func createTables() error {
	// 创建用户表
	if _, err := database.DB.Exec(models.CreateUsersTable); err != nil {
		return fmt.Errorf("failed to create users table: %v", err)
	}

	// 创建Excel数据表
	if _, err := database.DB.Exec(models.CreateEdataTable); err != nil {
		return fmt.Errorf("failed to create edata table: %v", err)
	}

	return nil
}

func setupRoutes(r *gin.Engine) {
	// 创建 API 路由组
	api := r.Group("/api")
	{
		// 认证相关路由
		api.POST("/register", handlers.HandleRegister)
		api.POST("/login", handlers.HandleLogin)

		// 任务相关路由
		api.GET("/tasks", handlers.HandleGetTasks)
		api.POST("/tasks", handlers.HandleAddTask)
		api.PUT("/tasks/:id", handlers.HandleUpdateTask)
		api.DELETE("/tasks/:id", handlers.HandleDeleteTask)

		// 文件上传路由
		api.POST("/upload", handlers.HandleFileUpload)

		// 统计相关路由
		api.GET("/statistics", handlers.HandleGetStatistics)
		api.GET("/statistics/user", handlers.HandleGetUserStatistics)
	}
}
